package com.yx.changdao.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.github.liaochong.myexcel.core.annotation.IgnoreColumn;
import com.yx.changdao.common.annotation.AutoFill;
import com.yx.changdao.common.utils.SysUtils;
import com.yx.changdao.common.valid.Default;
import com.yx.changdao.common.valid.Update;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;

@Getter
@Setter
@ExcelModel(excludeParent = true, ignoreStaticFields = true)
@TableName(ProblemInfo.TABLE_NAME)
public class ProblemInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 数据库名
     */
    public static final String TABLE_NAME = "problem_info";

    /**
     * 问题信息id
     */
    public static final String PROBLEM_INFO_ID = "problem_info_id";
    /**
     * 反馈居民姓名
     */
    public static final String RESIDENT_NAME = "resident_name";
    /**
     * 反馈居民手机号
     */
    public static final String RESIDENT_PHONE = "resident_phone";
    /**
     * 反馈居民地址
     */
    public static final String RESIDENT_ADDRESS = "resident_address";
    /**
     * 反馈居民身份证号
     */
    public static final String RESIDENT_IDCARD = "resident_idcard";
    /**
     * 反馈居民性别
     */
    public static final String RESIDENT_SEX = "resident_sex";
    /**
     * 意见建议类别(意见建议类 自主解决问题类 派单解决问题类)
     */
    public static final String CATEGORY = "category";
    /**
     * 意见建议行业类别(教育 医疗 旅游 渔业 交通 宜居环境 社会治安 社会保障 政务服务 文化生活 其他)
     */
    public static final String INDUSTRY_CATEGORY = "industry_category";
    /**
     * 办理难度(简单 一般 困难 受限, 当且仅当 自主解决问题类 可以提交办理难度)
     */
    public static final String DIFFICULT_LEVEL = "difficult_level";
    /**
     * 楼编号
     */
    public static final String BUILD_CODE = "build_code";
    /**
     * 单元号
     */
    public static final String UNIT = "unit";
    /**
     * 室号(门牌号)
     */
    public static final String DOOR_PLATE = "door_plate";
    /**
     * 是否关联到户(0-没关联 1-已关联)
     */
    public static final String IF_RELATION_BUILD_DETAIL = "if_relation_build_detail";
    /**
     * 网格id
     */
    public static final String GRID_ID = "grid_id";
    /**
     * 楼名称
     */
    public static final String BUILD_NAME = "build_name";
    /**
     * 户id
     */
    public static final String BUILD_DETAIL_ID = "build_detail_id";
    /**
     * 意见建议内容
     */
    public static final String CONTENT = "content";
    /**
     * 联户人小组id
     */
    public static final String CONTACT_GROUP_ID = "contact_group_id";
    /**
     * 联户人小组名称
     */
    public static final String CONTACT_GROUP_NAME = "contact_group_name";
    /**
     * 联户人姓名(多个人名用,分隔)
     */
    public static final String CONTACT_NAMES = "contact_names";

    /**
     * 是否上报给管理员 (0-未上报 1-已上报  3-打回)
     */
    public static final String IF_REPORT_MANAGER = "if_report_manager";
    /**
     * 是否上报(0-未上报 1-待审核 2-通过 3-打回)
     */
    public static final String IF_REPORT = "if_report";
    /**
     * 录入和上报部门id
     */
    public static final String REPORT_DEP_ID = "report_dep_id";
    /**
     * 录入和上报部门名称
     */
    public static final String REPORT_DEP_NAME = "report_dep_name";
    /**
     * 上报时间
     */
    public static final String REPORT_TIME = "report_time";
    /**
     * 是否分配(0-未分配 1-已分配)
     */
    public static final String IF_ASSIGN = "if_assign";
    /**
     * 承办单位名(多个之间,分隔)
     */
    public static final String DEP_NAMES = "dep_names";
    /**
     * 是否是疑难件(0-非疑难件 1-疑难件)
     */
    public static final String IF_DIFFICULT = "if_difficult";
    /**
     * 子问题办理难度申请是否全部通过(0-未全部通过 1-全部通过)
     */
    public static final String IF_DIFFICULT_LEVEL_ALLPASS = "if_difficult_level_allpass";
    /**
     * 子问题是否全部办结(0-未全部办结 1-全部办结)
     */
    public static final String IF_ALLEND = "if_allend";
    /**
     * 创建时间
     */
    public static final String CREATE_TIME = "create_time";
    /**
     * 创建人
     */
    public static final String CREATE_BY_NAME = "create_by_name";
    /**
     * 创建人id
     */
    public static final String CREATE_BY = "create_by";
    /**
     * 更新时间
     */
    public static final String UPDATE_TIME = "update_time";
    /**
     * 更新人
     */
    public static final String UPDATE_BY_NAME = "update_by_name";
    /**
     * 更新人id
     */
    public static final String UPDATE_BY = "update_by";

    /**
     * 联户人1姓名
     */
    public static final String CONTACT1_NAME = "contact1_name";
    /**
     * 联户人1手机号
     */
    public static final String CONTACT1_PHONE = "contact1_phone";
    /**
     * 联户人2姓名
     */
    public static final String CONTACT2_NAME = "contact2_name";
    /**
     * 联户人2手机号
     */
    public static final String CONTACT2_PHONE = "contact2_phone";

    /**
     * 是否挂起 0 未挂起, 1挂起
     */
    public static final String IF_HANGUP = "if_Hangup";

    /**
     * 难度上报状态
     */
    public static final String IF_DIFFICULT_LEVEL_REPORT = "if_difficult_level_report";
    /**
     * 分配意见
     */
    public static final String ASSIGN_OPINION = "assign_opinion";


    /**
     * 问题信息id
     */
    @ExcelColumn(index = 0, title = "序号")
    @TableId(type = IdType.AUTO)
    @NotNull(message = "问题信息ID不能为空", groups = Update.class)
    private Integer problemInfoId;

    /**
     * 楼编号
     */
    @ExcelColumn(index = 1, title = "楼编号")
    private String buildCode;
    /**
     * 单元号
     */
    @ExcelColumn(index = 2, title = "单元号")
    private Integer unit;
    /**
     * 室号(门牌号)
     */
    @ExcelColumn(index = 3, title = "室号")
    private String doorPlate;

    /**
     * 反馈居民姓名
     */
    @ExcelColumn(index = 4, title = "反馈居民姓名")
    @NotEmpty(message = "反馈人姓名不能为空", groups = {Update.class, Default.class})
    private String residentName;
    /**
     * 反馈居民身份证号
     */
   // @Length(max = 18, min = 18, message = "身份证号必须为18位", groups = {Update.class, Default.class})
    @ExcelColumn(index = 5, title = "反馈居民身份证号")
    private String residentIdcard;

    /**
     * 反馈居民手机号
     */
    @ExcelColumn(index = 6, title = "手机号或者座机号")
    @NotEmpty(message = "手机号或者座机号不能为空", groups = {Update.class, Default.class})
    private String residentPhone;
    /**
     * 反馈居民地址
     */
    @ExcelColumn(index = 7, title = "反馈居民地址")
    private String residentAddress;
    /**
     * 反馈居民性别
     */
    private String residentSex;

    /**
     * 意见建议类别(意见建议类 自主解决问题类 派单解决问题类)
     */
    @ExcelColumn(index = 8, title = "意见建议类别")
    @NotEmpty(message = "意见建议类别不能为空", groups = {Update.class, Default.class})
    private String category;
    /**
     * 意见建议行业类别(教育 医疗 旅游 渔业 交通 宜居环境 社会治安 社会保障 政务服务 文化生活 其他)
     */
    @ExcelColumn(index = 9, title = "意见建议行业类别")
    @NotEmpty(message = "意见建议行业类别不能为空", groups = {Update.class, Default.class})
    private String industryCategory;

    /**
     * 意见建议内容
     */
    @NotEmpty(message = "意见建议内容不能为空", groups = {Update.class, Default.class})
    @ExcelColumn(index = 10, title = "意见建议内容")
    private String content;
    /**
     * 办理难度(简单 一般 困难 受限, 当且仅当 自主解决问题类 可以提交办理难度)
     */
    @ExcelColumn(index = 11, title = "办理难度")
    private String difficultLevel;

    /**
     * 联户人小组id
     */
    @IgnoreColumn
    @TableField(updateStrategy=FieldStrategy.IGNORED)
    private Integer contactGroupId;
    /**
     * 联户人小组名称
     */
    @IgnoreColumn
    private String contactGroupName;

    /**
     * 联户人姓名(多个人名用,分隔)
     */
    @IgnoreColumn
    private String contactNames;

    /**
     * 是否关联到户(0-没关联 1-已关联)
     */
    @IgnoreColumn
    @TableField(updateStrategy=FieldStrategy.IGNORED)
    private Integer ifRelationBuildDetail;
    /**
     * 网格id
     */
    @IgnoreColumn
    @TableField(updateStrategy=FieldStrategy.IGNORED)
    private Integer gridId;
    /**
     * 楼名称
     */
    @IgnoreColumn
    private String buildName;
    /**
     * 户id
     */
    @IgnoreColumn
    @TableField(updateStrategy=FieldStrategy.IGNORED)
    private Integer buildDetailId;
    /**
     * 是否上报(0-未上报 1-待审核 2-通过 3-打回)
     */
    @IgnoreColumn
    private Integer ifReport;
    /**
     * 是否上报给管理员 (0-未上报 1-已上报  3-打回)
     */
    @IgnoreColumn
    private Integer ifReportManager;
    /**
     * 录入和上报部门id
     */
    @IgnoreColumn
    private Integer reportDepId;
    /**
     * 录入和上报部门名称
     */
    @IgnoreColumn
    private String reportDepName;
    /**
     * 上报时间
     */
    @IgnoreColumn
    private Date reportTime;
    /**
     * 是否分配(0-未分配 1-已分配)
     */
    @IgnoreColumn
    private Integer ifAssign;
    /**
     * 承办单位名(多个之间,分隔)
     */
    @IgnoreColumn
    private String depNames;
    /**
     * 是否是疑难件(0-非疑难件 1-疑难件)
     */
    @IgnoreColumn
    private Integer ifDifficult;
    /**
     * 子问题办理难度申请是否全部通过(0-未全部通过 1-全部通过)
     */
    @IgnoreColumn
    private Integer ifDifficultLevelAllpass;
    /**
     * 子问题是否全部办结子问题是否全部办结(0-未全部办结 1-全部办结)
     */
    @IgnoreColumn
    private Integer ifAllend;

    /**
     * 是否挂起 0 未挂起, 1挂起
     */
    @IgnoreColumn
    private Integer ifHangup;
    /**
     * 创建时间
     */
    @IgnoreColumn
    @AutoFill
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 创建人
     */
    @IgnoreColumn
    @AutoFill(klass = SysUtils.class, method = "currentUserName")
    @TableField(fill = FieldFill.INSERT)
    private String createByName;
    /**
     * 创建人id
     */
    @IgnoreColumn
    @AutoFill(klass = SysUtils.class, method = "currentUserId")
    @TableField(fill = FieldFill.INSERT)
    private String createBy;
    /**
     * 更新时间
     */
    @IgnoreColumn
    @AutoFill
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    /**
     * 更新人
     */
    @IgnoreColumn
    @AutoFill(klass = SysUtils.class, method = "currentUserName")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateByName;
    /**
     * 更新人id
     */
    @IgnoreColumn
    @AutoFill(klass = SysUtils.class, method = "currentUserId")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /**
     * 联户人1姓名
     */
    @IgnoreColumn
    private String contact1Name;
    /**
     * 联户人1手机号
     */
    @IgnoreColumn
    private String contact1Phone;
    /**
     * 联户人2姓名
     */
    @IgnoreColumn
    private String contact2Name;
    /**
     * 联户人2手机号
     */
    @IgnoreColumn
    private String contact2Phone;
    /**
     * 1-已上报难度（只要子问题中有一个上报难度审批的，就是已上报难度） 0-未上报难度（所有子问题都没有上报难度的，就是未上报难度）
     */
    @IgnoreColumn
    private Integer ifDifficultLevelReport;
    /**
     * 分配意见
     */
    private String assignOpinion;


}
